from graphviz import Digraph

# 创建图像实例
dot = Digraph(comment='数据采集与更新模块流程')

# 为数据采集与报警流程添加节点和边
with dot.subgraph(name='cluster_0') as c:
    c.attr(color='blue')
    c.attr(label='数据采集与报警流程')
    c.node('A', '1. 查询设备状态数据')
    c.node('B', '2. 解析并校验数据')
    c.node('C', '3. 检查数据更新')
    c.node('D', '4. 数据重复检测')
    c.node('E', '5. 报警判断')
    c.node('F', '6. 调用数据更新')
    c.edges([('A', 'B'), ('B', 'C'), ('C', 'D'), ('D', 'E'), ('E', 'F')])

# 为数据存储与汇总更新流程添加节点和边
with dot.subgraph(name='cluster_1') as c:
    c.attr(color='blue')
    c.attr(label='数据存储与汇总更新流程')
    c.node('G', '1. 连接数据库')
    c.node('H', '2. 数据插入与更新')
    c.node('I', '3. 异常处理')
    c.node('J', '4. 关闭数据库连接')
    c.edges([('G', 'H'), ('H', 'I'), ('I', 'J')])

# 绘制最终图像
dot.attr(label=r'\n\n数据采集与更新模块流程图')
dot.attr(fontsize='20')

# 保存并渲染图形，保存为PDF文件（确保安装了Graphviz软件）
dot.render('data_collection_and_update_process', format='svg', view=True)
